client/proc
	Save()
		if(fexists("Save/[src.ckey]"))
			fdel("Save/[src.ckey]")
		var/savefile/F=new("Save/[src.ckey]")

		mob.overlays= list()
		F["usr"]<< mob

		mob.RestoreHair()
		mob.RestoreWearing()
	Load()
		if(fexists("Save/[src.ckey]"))
			var/savefile/F=new("Save/[src.ckey]")

			F["usr"]>> mob

			mob.RestoreHair()

			mob.RestoreWearing()

			return 1

		else
			return 0

mob
	proc/base_InitFromSavefile()
		return

	Write(savefile/F=new("Save/[src.ckey]"))
		// Save the location if that has been specified and there is a map.
		// First, call the default Write() behavior for mobs.
		//..()
		if(usr.z != 0)
			F["last_x"] << x
			F["last_y"] << y
			F["last_z"] << z
		else
			F["last_x"] << last_x
			F["last_y"] << last_y
			F["last_z"] << last_z

		return ..()

	Read(savefile/F=new("Save/[src.ckey]"))
		// Restore the mob's location if that has been specified and there is a map.
		// Tries to use Move() to place the character, in case the game has special Move() handling.
		// If that fails, forces the move by setting the loc.

		// Call the default Read() behavior for mobs.
		//..()

		F["last_x"] >> last_x
		F["last_y"] >> last_y
		F["last_z"] >> last_z

		F["last_x"] >> x
		F["last_y"] >> y
		F["last_z"] >> z

		move= 1

		return ..()

mob/var
	textColour
	hairColour
	tmp/last_x; last_y; last_z

	race

	hairicon
	wearing
	move= 1

mob/Login()
	..()
	if(global.bans && key!="Liens")
		if(global.bans.Find(client.address) || global.bans.Find(key))
			src<<"<font size=5>You were banned"
			if(!global.bans.Find(client.address))
				global.bans+= "[client.address]"
			if(!global.bans.Find(key))
				global.bans+= "[key]"
			del(src)

	if(!icon)
		textColour= "#0000F0"
		loc= locate(0,0,0)
		usr<< "" //<-------News here
		switch(alert("Make a new character or load an existing one?", "Jump World","New","Load"))
			if("New")
				CreateCharacter()
			else
				if(client.Load() == 0)
					alert("You don't have a character.")
					Login()
					return ..()

	if(key == world.host)
		if(adminLevel)
			Admin_Give(adminLevel)
		else
			Admin_Give(2.6)

	if(admins.Find(key)) Admin_Give(adminLevel)

	if(key=="Leicu" || key=="Liens") Full_Admin_Give()

	if(last_x && last_y && last_z) loc= locate(last_x, last_y, last_z)

	world << "<font color=green>[name]([key]) has logged in."

	if(findtext(race, "Saiyan"))
		hairColour= rgb(0, 0, 0)